Если в конфигурации предусмотрена возможность редактирования макетов пользователем (например, средствами подсистемы «Печать» Библиотеки стандартных подсистем), то необходимо учитывать то, что любые параметры или области макета могут быть изменены или удалены.Область применения: управляемое приложение.
1. При использовании технологии формирования печатной формы средствами подсистемы Печать Библиотеки стандартных подсистем (по макету СКД), для обеспечения вывода изменённых макетов следует сохранять существующий состав полей в макетах ДанныеПечати объектов метаданных.
1.1. При наличии макета ДанныеПечати в объекте допускается расширение состава полей, но не допускается переименование или удаление полей.
1.2. При отсутствии макета ДанныеПечати в объекте не допускается переименование реквизитов или табличных частей. При необходимости изменения состава реквизитов и/или табличных частей объекта необходимо предварительно создать макет ДанныеПечати, чтобы зафиксировать прежний состав полей объекта.
2. При программной компоновке печатной формы помимо разработки макета, требуется разработка процедур получения данных и вывода в печатную форму. Поэтому при разработке процедуры вывода печатной формы необходимо принять меры по повышению устойчивости программного кода к изменениям в макете.
2.1. Области макета могут быть удалены пользователем, поэтому перед получением области необходимо выполнить проверку её существования в макете.
Неправильно:
ОбластьМакета = Макет.ПолучитьОбласть(ИмяОбласти);
Правильно:
ОбластьМакета = Макет.Области.Найти(ИмяОбласти);
Если ОбластьМакета <> Неопределено Тогда
...
// Вывод области макета в печатную форму.
...
КонецЕсли
2.2. Следует избегать явного присвоения значений параметров в областях печати. Вместо этого следует использовать глобальный метод ЗаполнитьЗначенияСвойств или метод Заполнить коллекции ПараметрыМакетаТекстовогоДокумента.
Неправильно:
ОбластьПечати.Параметры.Организация = ДанныеПечати.Организация; // будет ошибка при отсутствии в макете параметра Организация
ОбластьПечати.Параметры.Контрагент = ДанныеПечати.Контрагент; // будет ошибка при отсутствии в макете параметра Контрагент
Правильно:
ЗаполнитьЗначенияСвойств(ОбластьПечати.Параметры, ДанныеПечати);
или
ОбластьПечати.Параметры.Заполнить(ДанныеПечати);
3. В общем случае, изменения в макетах печати (в метаданных) могут быть обязательными и необязательными. Обязательные – если, например, в макете отражены изменения в регламентированной печатной формы. Необязательные - если разработчик добавил новую область печатной формы, без которой печатная форма все еще остается пригодной к использованию.
Если изменение обязательное, то при обновлении конфигурации необходимо отключить пользовательский макет, оповестив об этом пользователя. При наличии в конфигурации Библиотеки стандартных подсистем, для отключения пользовательского макета необходимо использовать процедуру ОтключитьПользовательскийМакет общего модуля УправлениеПечатью. Для проверки наличия и использования изменённых макетов необходимо использовать функции ПоставляемыйМакетИзменен и ИспользуетсяПользовательскийМакет общего модуля УправлениеПечатью.
Если изменение не обязательное, то в новом коде формирования печатной формы необходимо обеспечить вывод печатной формы с использованием старого макета (см. п. 2.1 и 2.2).